package licode.unisop.platform.client.api;

import licode.unisop.provider.info.*;
import licode.unisop.provider.vo.*;

import java.util.List;

/**
 * 平台端开放的接口定义，用于查询平台相关信息
 *
 * @author WR
 */
public interface SiPlatformQueryService {
    /**
     * 查询平台信息
     * @param findInfo 平台查询信息
     * @return 平台信息
     */
    SiPlatform lookupPlatform(SiPlatIdFind findInfo);

    /**
     * 分页查找用户信息
     *
     * @param req 查找条件
     * @return 用户信息
     */
    SiPageResult<SiPlatform> findPlatformPage(PlatPageInfo req);
    SiPageResult<String> findAuthPlatformPage(AuthPlatPageInfo req);

    /**
     * 获取用户、角色、客户等资源信息
     *
     * @param idFind 领域和资源ID
     * @return 用户资源
     */
    SiAssetEntry lookupAssetInfo(SiAssetId idFind);

    /**
     * 根据资源ID查询资源基本信息
     * @param lookupIn 查询信息
     * @return 资源信息
     */
    SiAssetBrief lookupAssetBrief(SiAssetLookupIn lookupIn);

    /**
     * 获取资源子资源条数（对于具有层次结构的资源）
     *
     * @return 资源子资源条数
     */
    Long getSubAssetCount(SiAssetLookupIn lookupIn);

    /**
     * 找到资源关联的其它资源的KEY
     *
     * @param idFind 查找条件
     * @return 资源关联的KEY
     */
    List<SiAssetKey> findAssetKeys(SiAssetId idFind);

    /**
     * 获取平台资源信息
     *
     * @param plInfo 平台ID查询条件
     * @return 平台资源信息
     */
    SiAssetInfo getPlatformAssets(SiPlatIdFind plInfo);

    /**
     * 根据资源编码查询资源
     * @param lookupIn 查询信息
     * @return 资源信息
     */
    SiAssetBrief lookupAssetByCode(SiLookupAssetByCodeIn lookupIn);

    /**
     * 根据资源类型和code查找资源信息（从登录平台查找）
     * @param req 查找条件
     * @return 资源信息
     */
    SiAssetBrief lookupAuthAssetByCode(SiAssetCodeLookupIn req);

    /**
     * 根据资源类型查找资源信息（从缓存查找）
     * @param req 查找条件
     * @return 资源信息
     */
    List<SiAssetBrief> queryAssetsByCode(SiAssetCodeQueryIn req);

    /**
     * 查找资源信息
     * @param req 查找条件
     * @return 用户信息
     */
    List<SiAssetBrief> findAssetList(AssetListInfo req);

    /**
     * 分页查找关联的目标资源信息
     * @param req 查找条件
     * @return 用户信息
     */
    SiPageResult<SiAssetRelation> findHoldRelAssetPage(HoldAssetPageInfo req);

    /**
     * 分页查找关联的宿主资源信息
     * @param req 查找条件
     * @return 用户信息
     */
    SiPageResult<SiAssetRelation> findAssetRelHoldPage(AssetHoldPageInfo req);

    /**
     * 分页查找资源信息
     * @param req 查找条件
     * @return 用户信息
     */
    SiPageResult<SiAssetBrief> findAssetPage(AssetPageInfo req);

    /**
     * 获取用户资源信息
     *
     * @param userInfo 用户ID查询条件
     * @return 用户资源信息
     */
    SiAssetHold getUserAssets(SiHoldInfo userInfo);

    /**
     * 获取资源拥有的其它信息
     *
     * @param holdInfo@return 资源信息
     */
    SiAssetHold getHoldAssets(SiHoldInfo holdInfo);

    /**
     * 分页查找关联的目标资源信息
     * @param req 查找条件
     * @return 用户信息
     */
    SiPageResult<SiAssetBrief> findHoldAssetPage(HoldAssetPageInfo req);

    /**
     * 分页查找关联的宿主资源信息
     * @param req 查找条件
     * @return 用户信息
     */
    SiPageResult<SiAssetBrief> findAssetHoldPage(AssetHoldPageInfo req);
}
